package cn.glc.daily.life.web.convert;

import cn.glc.daily.life.common.auth.UserHelper;
import cn.glc.daily.life.infrastructure.po.UserTaskPo;
import cn.glc.daily.life.model.dto.user.task.UserTaskAddDto;
import cn.glc.daily.life.model.dto.user.task.UserTaskUpdateDto;
import cn.glc.daily.life.model.dto.user.task.UserTaskUpdateStatusDto;
import cn.glc.daily.life.model.enums.TaskPriorityEnums;
import cn.glc.daily.life.model.ro.UserTaskRo;
import cn.glc.daily.life.model.vo.user.task.UserTaskDetailVo;
import cn.glc.daily.life.model.vo.user.task.UserTaskVo;
import cn.simon.free.tools.utils.DateUtils;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

/**
 * 用户任务
 *
 * @author simon
 * @date 2021/5/12 15:17
 * @copyright:
 * @modifier
 * @motto a no talent, people who have to study hard
 */
@Mapper
public interface UserTaskConvert {

    UserTaskConvert INSTANCE = Mappers.getMapper(UserTaskConvert.class);

    /**
     * 用户任务新增dto 转 po
     *
     * @param userTaskAddDto
     * @return
     */
    default UserTaskPo userTaskAddDto2Po(UserTaskAddDto userTaskAddDto) {
        UserTaskPo userTaskPo = new UserTaskPo();
        userTaskPo.setUid(userTaskAddDto.getUid());
        userTaskPo.setTitle(userTaskAddDto.getTitle());
        userTaskPo.setContent(userTaskAddDto.getContent());
        userTaskPo.setPushTime(userTaskAddDto.getPushTime());
        userTaskPo.setIsDone(false);
        userTaskPo.setPriority(userTaskAddDto.getPriority().getPriority());
        userTaskPo.setCreator(UserHelper.getOperator().getName());
        userTaskPo.setCreateTime(DateUtils.now());
        return userTaskPo;
    }

    /**
     * 用户任务详情 po 转 vo
     *
     * @param userTaskPo
     * @return
     */
    default UserTaskDetailVo po2UserTaskDetail(UserTaskPo userTaskPo) {
        return UserTaskDetailVo.builder()
                .uid(userTaskPo.getUid())
                .title(userTaskPo.getTitle())
                .content(userTaskPo.getContent())
                .isDone(userTaskPo.getIsDone())
                .pushTime(DateUtils.format(userTaskPo.getPushTime()))
                .priority(TaskPriorityEnums.match(userTaskPo.getPriority()))
                .build();
    }

    /**
     * 分页 - 用户任务po 转 vo
     *
     * @param userTaskPo
     * @return
     */
    default UserTaskVo userTaskPo2IUserTaskVo(UserTaskPo userTaskPo) {
        return UserTaskVo.builder()
                .id(userTaskPo.getId())
                .uid(userTaskPo.getUid())
                .title(userTaskPo.getTitle())
                .content(userTaskPo.getContent())
                .pushTime(DateUtils.format(userTaskPo.getPushTime()))
                .isDone(userTaskPo.getIsDone())
                .priority(TaskPriorityEnums.match(userTaskPo.getPriority()))
                .modifier(UserHelper.getOperator().getName())
                .updateTime(DateUtils.format(userTaskPo.getUpdateTime())).build();

    }

    /**
     * 用户任务修改dto 转 po
     *
     * @param userTaskUpdateDto
     * @return
     */
    default UserTaskPo userTaskUpdateDto2Po(UserTaskUpdateDto userTaskUpdateDto) {
        UserTaskPo userTaskPo = new UserTaskPo();
        userTaskPo.setId(userTaskUpdateDto.getId());
        userTaskPo.setTitle(userTaskUpdateDto.getTitle());
        userTaskPo.setContent(userTaskUpdateDto.getContent());
        userTaskPo.setPushTime(userTaskUpdateDto.getPushTime());
        userTaskPo.setModifier(UserHelper.getOperator().getName());
        userTaskPo.setUpdateTime(DateUtils.now());
        return userTaskPo;
    }

    /**
     * 用户任务状态修改dto 转 po
     *
     * @param userTaskUpdateStatusDto
     * @return
     */
    default UserTaskPo userTaskUpdateStatusDto2Po(UserTaskUpdateStatusDto userTaskUpdateStatusDto) {
        UserTaskPo userTaskPo = new UserTaskPo();
        userTaskPo.setId(userTaskUpdateStatusDto.getId());
        userTaskPo.setIsDone(userTaskUpdateStatusDto.getIsDone());
        userTaskPo.setModifier(UserHelper.getOperator().getName());
        return userTaskPo;
    }

    /**
     * 用户po 转 ro
     *
     * @param userTaskPo
     * @return
     */
    UserTaskRo userTaskPo2Ro(UserTaskPo userTaskPo);


}
